/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package BD;

import BE.Cliente;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author dennis
 */
public class ClienteBD {

    private Session session;

    public ClienteBD() {

         this.session = null;

    }

    public Double buscarDescuento(int idCliente) {
        List lista = null;
        String consulta="";
        consulta="SELECT rl_porcentajedscto " +
                "FROM dsctotipocliente " +
                "where srl_tipocliente=(select srl_tipocliente from cliente where srl_idpersona="+idCliente+") " +
                "and date_fechainicio<=date_trunc('day',now()) and date_fechafin>=date_trunc('day',now())";

        Transaction tx =null;
        try {
            session=HibernateUtil.getSessionFactory().getCurrentSession();
            tx = session.beginTransaction();
            SQLQuery sqlquery=session.createSQLQuery(consulta);

            session.flush();
            lista = sqlquery.list();
            tx.rollback();
        } catch (Exception e) {
            e.printStackTrace();
            if(tx!=null)
            {
                tx.rollback();
            }
        }
        return Double.parseDouble(lista.get(0).toString());
        
    }


    public boolean eliminarCliente(Cliente objClienteBE) {


        Transaction tx=null;
        try {
            
            session = HibernateUtil.getSessionFactory().getCurrentSession();
            tx = (Transaction) session.beginTransaction();
            session.flush();
            session.evict(objClienteBE);
            session.update(objClienteBE);
            tx.commit();

            return true;

        } catch (Exception e) {
            e.printStackTrace();
            if(tx!=null)
            {
                tx.rollback();
            }
            return false;
        }
    }

    public boolean insertarCliente(Cliente objClienteBE) {

        Transaction tx =null;
        try { 

            session = HibernateUtil.getSessionFactory().getCurrentSession();
            tx = session.beginTransaction();
            session.save(objClienteBE);
            tx.commit();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            if(tx!=null)
            {
                tx.rollback();
            }
            return false;
        }

    }

    public boolean modificarCliente(Cliente objClienteBE) {

        Transaction tx =null;
        try {

            session = HibernateUtil.getSessionFactory().getCurrentSession();
            tx = (Transaction) session.beginTransaction();
            session.flush();
            session.evict(objClienteBE);

//            TipoDocumentoBE objTipoDocumentoX = (TipoDocumentoBE) session.get(TipoDocumentoBE.class, new Integer(objTipodocumento.getSrlIdtipodocumento()));
//
//            if (objTipoDocumentoX == null) {
//
//                objTipoDocumentoX = new TipoDocumentoBE();
//                objTipoDocumentoX.setCvNombredocumento(objTipodocumento.getCvNombredocumento());
//                objTipoDocumentoX.setBoolEliminado(objTipodocumento.getBoolEliminado());
//
//            }
//            objTipoDocumentoX.setCvNombredocumento(objTipodocumento.getCvNombredocumento());
//            objTipoDocumentoX.setBoolEliminado(objTipodocumento.getBoolEliminado());
            session.saveOrUpdate(objClienteBE);
            tx.commit();
            //session.close();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
             if(tx!=null)
            {
                tx.rollback();
            }
            return false;
        }
    }


    public Collection seleccionarCliente() {
        List<Cliente> lista = null;
        Transaction tx = null;
        try
        {
        session = HibernateUtil.getSessionFactory().getCurrentSession();
        tx = session.beginTransaction();
        Criteria crit = session.createCriteria(Cliente.class);
        lista=crit.list();
        tx.rollback();
        }
        catch(Exception e) {
            e.printStackTrace();
             if(tx!=null)
            {
                tx.rollback();
            }
        }
        return lista;
    }

    public List<Cliente> buscarClientesHojaRuta(Cliente objClienteBE,int idUsuario) {
//

        List<Cliente> lista = null;
        Date fecha=new Date();
        int intDia=fecha.getDay();
        String strDia="";
        switch (intDia) {
            case 0:  strDia="Domingo"; break;
            case 1:  strDia="Lunes"; break;
            case 2:  strDia="Martes"; break;
            case 3:  strDia="Miercoles"; break;
            case 4:  strDia="Jueves"; break;
            case 5:  strDia="Viernes"; break;
            case 6:  strDia="Sábado"; break;
          
        }
        Date dia= new Date();
        String consulta="";

        consulta="Select {cliente.*} " +
                "From cliente where srl_idmesa in " +
                  "(select srl_idmesa " +
                  "from mesa " +
                  "where srl_idzona in " +
                     "(select srl_idzona " +
                      "from zona " +
                      "where srl_asignadoa="+idUsuario+" and " +
                             "bool_eliminado=false) and " +
                             "bool_eliminado=false and " +
                             "cv_dia = '"+strDia+"') " +
                   "and bool_eliminado=false";
        String consulta_cliente_visitados="";
        consulta_cliente_visitados= " and srl_idpersona not in " +
                                          "(SELECT srl_idcliente " +
                                          "FROM visita " +
                                          "WHERE date_trunc('day',date_fechavisita) = date_trunc('day',now()))" +
                                          " order by srl_idpersona";
        consulta=consulta+consulta_cliente_visitados;
        Transaction tx =null;
        try {
            session = HibernateUtil.getSessionFactory().getCurrentSession();
            tx = session.beginTransaction();
            SQLQuery sqlquery=session.createSQLQuery(consulta);
            sqlquery.addEntity("cliente",Cliente.class);
           
            session.flush();
            lista = sqlquery.list();
            tx.rollback();
        } catch (Exception e) {
            e.printStackTrace();
            if(tx!=null)
            {
                tx.rollback();
            }
        }
        return lista;
    }

    public List<Cliente> buscarCliente(Cliente objClienteBE) {
//
        List<Cliente> lista = null;
        Transaction tx = null;
        try {
            session = HibernateUtil.getSessionFactory().getCurrentSession();
            tx= session.beginTransaction();
            Criteria crit = session.createCriteria(Cliente.class);

            if (objClienteBE.getSrlIdpersona() > 0) {
                crit.add(Restrictions.eq("srlIdpersona", objClienteBE.getSrlIdpersona()));
            }
            if (!objClienteBE.getCvNombre().equals("")) {
                crit.add(Restrictions.sqlRestriction("upper(cv_nombre) like '%"+objClienteBE.getCvNombre()+"%'"));
            }

            if (!objClienteBE.getCvApellidopaterno().equals("")) {
                crit.add(Restrictions.sqlRestriction("upper(cv_apellidopaterno) like '%"+objClienteBE.getCvApellidopaterno()+"%'"));
            }

            if (!objClienteBE.getCvIdentificacion().equals("")) {
                crit.add(Restrictions.eq("cvIdentificacion", objClienteBE.getCvIdentificacion()));
            }

            if (objClienteBE.getTipocliente().getSrlTipocliente()!=0)
            {
                 crit.add(Restrictions.eq("tipocliente.srlTipocliente", objClienteBE.getTipocliente().getSrlTipocliente()));
            }

            if (objClienteBE.getTipoidentificacion().getSrlIdtipoidentificacion()!=0)
            {
                 crit.add(Restrictions.eq("tipoidentificacion.srlIdtipoidentificacion", objClienteBE.getTipoidentificacion().getSrlIdtipoidentificacion()));
            }
            crit.add(Restrictions.eq("boolEliminado", false));

            crit.addOrder(Order.asc("srlIdpersona"));

            session.flush();
            lista = crit.list();
            tx.rollback();
        } catch (Exception e) {
            e.printStackTrace();
            if(tx!=null)
            {
                tx.rollback();
            }
        }
        return lista;
    }
}
